﻿//IBlackScholes.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo.Derivatives
{
	using StockSharp.BusinessEntities;

	/// <summary>
	/// Интерфейс модели расчета значений "греков" по формуле Блэка-Шоулза.
	/// </summary>
	public interface IBlackScholes
	{
		/// <summary>
		/// Опцион.
		/// </summary>
		Security Option { get; }

		/// <summary>
		/// Безрисковая процентная ставка.
		/// </summary>
		decimal RiskFree { get; set; }

		/// <summary>
		/// Размер дивиденда по акциям.
		/// </summary>
		decimal Dividend { get; set; }

		/// <summary>
		/// Рассчитать премию опциона.
		/// </summary>
		/// <returns>Премия опциона.</returns>
		decimal Premium();

		/// <summary>
		/// Рассчитать премию опциона.
		/// </summary>
		/// <param name="deviation">Стандартное отклонение.</param>
		/// <returns>Премия опциона.</returns>
		decimal Premium(decimal deviation);

		/// <summary>
		/// Рассчитать дельту опциона.
		/// </summary>
		/// <returns>Дельта опциона.</returns>
		decimal Delta();

		/// <summary>
		/// Рассчитать дельту опциона.
		/// </summary>
		/// <param name="deviation">Стандартное отклонение.</param>
		/// <returns>Дельта опциона.</returns>
		decimal Delta(decimal deviation);

		/// <summary>
		/// Рассчитать гамму опциона.
		/// </summary>
		/// <returns>Гамма опциона.</returns>
		decimal Gamma();

		/// <summary>
		/// Рассчитать гамму опциона.
		/// </summary>
		/// <param name="deviation">Стандартное отклонение.</param>
		/// <returns>Гамма опциона.</returns>
		decimal Gamma(decimal deviation);

		/// <summary>
		/// Рассчитать вегу опциона.
		/// </summary>
		/// <returns>Вега опциона.</returns>
		decimal Vega();

		/// <summary>
		/// Рассчитать вегу опциона.
		/// </summary>
		/// <param name="deviation">Стандартное отклонение.</param>
		/// <returns>Вега опциона.</returns>
		decimal Vega(decimal deviation);

		/// <summary>
		/// Рассчитать тету опциона.
		/// </summary>
		/// <returns>Тета опциона.</returns>
		decimal Theta();

		/// <summary>
		/// Рассчитать тету опциона.
		/// </summary>
		/// <param name="deviation">Стандартное отклонение.</param>
		/// <returns>Тета опциона.</returns>
		decimal Theta(decimal deviation);

		/// <summary>
		/// Рассчитать ро опциона.
		/// </summary>
		/// <returns>Ро опциона.</returns>
		decimal Rho();

		/// <summary>
		/// Рассчитать ро опциона.
		/// </summary>
		/// <param name="deviation">Стандартное отклонение.</param>
		/// <returns>Ро опциона.</returns>
		decimal Rho(decimal deviation);

		/// <summary>
		/// Рассчитать подразумеваемую волатильность (Implied  Volatility).
		/// </summary>
		/// <param name="premium">Премия по опциону.</param>
		/// <returns>Подразумеваевая волатильность.</returns>
		decimal IV(decimal premium);
	}
}